#if !defined(ximera_audio_isound_hpp)
#define ximera_audio_isound_hpp

// -----------------------------------------------------------

#include <ximera/config.hpp>
#include <ximera/types.hpp>
#include <ximera/common/sharedptr.hpp>

#include <ximera/math/vector3.hpp>

#include <ximera/audio/isounddata.hpp>

namespace ximera { namespace audio
{
    XIMERA_ENUM(LoopMode)
        Off,
        On,
        Bidi
    XIMERA_ENUM_END(LoopMode);

    class XIMERA_API ISound
    {
    public:
        virtual ~ISound() {}

        virtual SharedPtr<ISoundData> const& soundData() const = 0;
        virtual void soundData(SharedPtr<ISoundData> const& data) = 0;
        virtual void soundData(ISoundData* data) = 0;

        virtual math::Vector3 position() const = 0;
        virtual void position(math::Vector3 const& pos) = 0;

        virtual math::Vector3 velocity() const = 0;
        virtual void velocity(math::Vector3 const& vel) = 0;

        virtual LoopMode loopMode() const = 0;
        virtual void loopMode(LoopMode mode) = 0;

        virtual void play() = 0;
        virtual void stop() = 0;
        virtual void pause() = 0;
    };

    typedef SharedPtr<ISound> ISoundPtr;
}}

// -----------------------------------------------------------

#endif
